#ifndef ROTATION_H
#define ROTATION_H
/*
 *  @autheur : LEMOUEL Florian
 *  @date : 12.04.2013
 *  @version 1.0 : création de la classe complète
 *  @version 1.1 : ajout de la sérialisation
 */

#include "transformation.h"
#include <QtOpenGL>

#include "boost/serialization/serialization.hpp"
#include <boost/serialization/export.hpp>

/*
 * Classe représentant une transformation de rotation pour
 * un objet de la scène.
 */
class Rotation : public Transformation
{
 //--------------------- Constructeurs et destructeur -------------------
public:
    //Constructeur par défault
    Rotation();

    //Constructeur à 4 paramètres
    Rotation(GLfloat angle, GLfloat rx, GLfloat ry, GLfloat rz);

    //Destructeur
    ~Rotation();
    //----------------------------------------------------------------------
    //--------------------- Méthodes ---------------------------------------
public:

    //Méthode permettant d'utiliser la rotation
    void utiliser();
    //----------------------------------------------------------------------
    //--------------------- Accesseurs -------------------------------------
public:

    //Mutateur de la composante en x de la rotation
    void setRx(GLfloat rx);

    //Mutateur de la composante en y de la rotation
    void setRy(GLfloat ry);

    //Mutateur de la composante en z de la rotation
    void setRz(GLfloat rz);

    //Mutateur de l'angle de la rotation
    void setAngle(GLfloat angle);
    //----------------------------------------------------------------------
    //--------------------- Surcharge des opérateurs -----------------------

    //----------------------------------------------------------------------
    //--------------------- Attributs --------------------------------------
private:
    //Rotation sur les 3 axes
    GLfloat _rx;
    GLfloat _ry;
    GLfloat _rz;

    //Angle de rotation
    GLfloat _angle;

    //----------------------------------------------------------------------
    //--------------------- Sérialisation ----------------------------------
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version) {
            ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Transformation);
            ar & _angle;
            ar & _rx;
            ar & _ry;
            ar & _rz;
    }
   //----------------------------------------------------------------------
};

BOOST_CLASS_EXPORT(Rotation);

#endif // ROTATION_H
